package zhiHu;

import java.util.Set;

/**
 * Created by sheny on 2017/1/11.
 */
public class BfsSpider {
    /**
     * 使用种子初始化url队列
     */
    private void initCrawlerWithSeeds(String[] seeds){
        for(int i=0;i<seeds.length;i++){
            SpiderQueue.addUnvisitedUrl(seeds[i]);
        }
    }
    // 定义过滤器，提取以 http://www.xxxx.com开头的链接
    public void crawling(String[] seeds) {
        LinkFilter filter = new LinkFilter(){
            public boolean accept(String url) {
                if (url.startsWith("http://www.baidu.com"))
                    return true;
                else
                    return false;
            }
        };
        // 初始化 URL 队列
        initCrawlerWithSeeds(seeds);
        // 循环条件：待抓取的链接不空
        while (!SpiderQueue.unVisitedUrlsEmpty()){
            //队头url出列
            String visitedUrl = String.valueOf(SpiderQueue.unVisitedUrlDeQueue());
            if(visitedUrl.equals("null")){
                continue;
            }
            SpiderByHttpClient client = new SpiderByHttpClient();
            client.downLoadFile(visitedUrl);
            // 该url放入已访问的visitedUrl中
            SpiderQueue.insVisited(visitedUrl);
            // 提取下载网页中的url
            Set<String> links = HtmlParseTool.extracLinks(visitedUrl,filter);
            // 新的访问url入列
            for(String link:links){
                SpiderQueue.addUnvisitedUrl(link);
            }

        }
    }

    // main 方法入口
    public static void main(String[] args) {
        BfsSpider crawler = new BfsSpider();
        crawler.crawling(new String[] { "http://www.baidu.com" });
    }
}
